Описание
Находят в указанном объекте Recordset первую, последнюю,
следующую или предыдущую запись и делают эту запись текущей записью.
наборЗаписей.{MoveFirst | MoveLast [dbRunAsync] | MoveNext | MovePrevious}
Параметры
наборЗаписей
Представляет объектную переменную,
задающую открытый объект Recordset.
Замечания
Методы группы Move применяются для перехода от записи к
записи без указания условия поиска записей.
После изменения текущей записи
следует обязательно сохранить изменения с помощью метода Update перехода
к следующей записи. Если переход к другой записи осуществляется без обновления
текущей записи, то все внесенные изменения будут потеряны без
предупреждения.
При открытии объекта Recordset первая запись набора
становится текущей, а свойство BOF получает значение False. Если
объект Recordset не содержит ни одной записи, то свойство BOF
получает значение True, а положение текущей записи становится
неопределенным.
Если текущей записью является первая или последняя запись
набора, то применение, соответственно, методов MoveFirst или
MoveLast не изменяет положение текущей записи.
При вызове метода
MovePrevious, когда текущей является первая запись набора, свойство
BOF принимает значение True, а текущая запись становится
неопределенной. При повторном вызове метода MovePrevious возникает
ошибка; свойство BOF при этом сохраняет значение True.
При
вызове метода MoveNext, когда текущей является последняя запись набора,
свойство EOF принимает значение True, а текущая запись становится
неопределенной. При повторном вызове метода MoveNext возникает ошибка;
свойство EOF при этом сохраняет значение True.
Если аргумент
наборЗаписей указывает на объект Recordset типа таблицы (только в рабочей
области ядра Microsoft Jet), то перемещение по записям производится в
соответствии с текущим индексом таблицы. Текущий индекс задается с помощью
свойства Index таблицы. Если текущий индекс не указан, то порядок записей
при переходах становится неопределенным.
Допускается использование метода
MoveLast для полного заполнения объектов Recordset типа
динамического набора записей или статического набора записей с включением в
объект Recordset текущего количества записей. Однако при таком вызове
метода MoveLast скорость выполнения приложения может существенно
уменьшиться. Рекомендуется вызывать метод MoveLast для подсчета записей
только в том случае, когда требуется аккуратный подсчет числа записей в новом
открытом объекте Recordset. При вызове метода MoveLast с
константой dbRunAsync метод выполняется в асинхронном режиме.
Пользователь имеет возможность использовать метод StillExecuting для
проверки, является ли объект Recordset полностью заполненным, и метод
Cancel для отмены выполнения метода MoveLast в асинхронном
режиме.
Не допускается вызов методов MoveFirst, MoveLast и
MovePrevious для объектов Recordset типа статического набора
записей с последовательным доступом.
Для перемещения положения указателя
текущей записи объекта Recordset на заданное число записей вперед или
назад следует применять метод Move.
Пример
Следующая программа использует методы MoveFirst,
MoveLast, MoveNext и MovePrevious для перемещения указателя
текущей записи в объекте Recordset на основании введенной команды. Для
выполнения этой процедуры требуется процедура MoveAny.
Sub MoveFirstX()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim strMessage As String
Dim intCommand As Integer
Set dbsNorthwind = OpenDatabase("Борей.mdb")
Set rstEmployees = dbsNorthwind.OpenRecordset( "SELECT Имя, Фамилия FROM Сотрудники " & "ORDER BY Фамилия", dbOpenSnapshot)
With rstEmployees
' Заполняет объект Recordset.
.MoveLast
.MoveFirst
Do While True
' Отображает сведения о текущей записи
' и принимает выбранный пользователем способ.
strMessage = "Имя: " & !Имя & " " & !Фамилия & vbCr & "Запись № " & _
(.AbsolutePosition + 1) & " из " & .RecordCount & vbCr & vbCr & _
"[1 - MoveFirst, 2 - MoveLast, " & vbCr & "3 - MoveNext, 4 - MovePrevious]"
intCommand = Val(Left(InputBox(strMessage), 1))
If intCommand < 1 Or intCommand > 4 Then Exit Do
' Вызывает метод, выбранный пользователем.
MoveAny intCommand, rstEmployees
Loop
.Close
End With
dbsNorthwind.Close
End Sub
Sub MoveAny(intChoice As Integer, rstTemp As Recordset)
' Использует выбранный метод, перехватывает метки BOF и EOF.
With rstTemp
Select Case intChoice
Case 1
.MoveFirst
Case 2
.MoveLast
Case 3
.MoveNext
If .EOF Then
MsgBox "Уже достигнут конец набора записей!"
.MoveLast
End If
Case 4
.MovePrevious
If .BOF Then
MsgBox "Уже достигнуто начало набора записей!"
.MoveFirst
End If
End Select
End With
End Sub